﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONEXION;
using Cotizav.PRESENTACION.Base;
using Cotizav.PRESENTACION.DialogBox;


namespace Cotizav.PRESENTACION.Personas.Cliente
{
    public partial class IURegistroCliente : UserControl
    {
        //List<CONEXION.CONTACTO> contactos;
        BindingList<CONEXION.CONTACTO> contactos;
        
        CtrlSector ctSector;
        CtrlVendedor ctVendedor;
        CtrlCategoria ctCategoria;
        CtrlSucursal ctSucursal;
        CtrlProvincia ctProvincia;
        CtrlDistrito ctDistrito;
        CtrlContactos ctcontactos;
        CtrlClientes ctClientes;        
        
        public IURegistroCliente()
        {
            InitializeComponent();

            ctSector = new CtrlSector();
            ctVendedor = new CtrlVendedor();
            ctCategoria = new CtrlCategoria();
            ctSucursal = new CtrlSucursal();
            ctProvincia = new CtrlProvincia();
            ctDistrito = new CtrlDistrito();
            ctcontactos = new CtrlContactos();
            ctClientes = new CtrlClientes();           
        }

        private void InicializarListaContactos()
        {
            contactos = new BindingList<CONTACTO>();
            
            contactos.AllowNew = true;
            contactos.AllowRemove = true;
            contactos.AllowEdit = true;
        }

        private void IURegistroCliente_Load(object sender, EventArgs e)
        {
            //cargar sector
            cmbSector.DataSource = ctSector.getListSector();
            cmbSector.DisplayMember = "nombreSector";
            cmbSector.ValueMember = "idSector";
            //cargar vendedor
            cmbVendedor.DataSource = ctVendedor.getListVendedor();
            cmbVendedor.DisplayMember = "nombre";
            cmbVendedor.ValueMember = "idVendedor";
            //cargar categoria
            cmbCategoria.DataSource = ctCategoria.getListCategoria();
            cmbCategoria.DisplayMember = "nombreCategoria";
            cmbCategoria.ValueMember = "idcategoria";
            //cargar sucursal
            cmbSucursal.DataSource = ctSucursal.getListSucursal();
            cmbSucursal.DisplayMember = "nombreSucursal";
            cmbSucursal.ValueMember = "idSucursal";
            //cargar provincia
            cmbProvincia.DataSource = ctProvincia.getListProvincia();
            cmbProvincia.DisplayMember = "nombreProvincia";
            cmbProvincia.ValueMember = "idProvincia";

            //asignamos la lista de contactos
            InicializarListaContactos();
            //gridContactos.DataSource = contactos2;
            contactos.AddingNew += new AddingNewEventHandler(contactos2_AddingNew);

            //establecemos el panel en modo lectura para el usuario
            setReadOnlyPanel();
            //setEditablePanel();
        }

        private void setRowsReadOnly()
        {
            foreach (DataGridViewRow dr in gridContactos.Rows)
            {
                dr.ReadOnly = true;
            }
        }

        #region Contactos

        private void contactos2_AddingNew(object sender, AddingNewEventArgs e)
        {
            e.NewObject = new CONTACTO()
            {
                nombre = txtNombreContacto.Text,
                cargo = txtCargoContacto.Text,
                email = txtEmailContacto.Text,
                telefono = txtTelefonoContacto.Text,
                fax = txtFaxContacto.Text,
                celular = txtCelularContacto.Text,
                nextel = txtNextelContacto.Text,
                rpc = txtRPCContacto.Text,
                rpm = txtRpmContacto.Text,
                statusflag = "I",
                eliminado = 0,
            };
        }        

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            //agregamos el contacto
            //CONEXION.CONTACTO c = new CONTACTO()
            //{
            //    nombre = txtNombreContacto.Text,
            //    cargo = txtCargoContacto.Text,
            //    email = txtEmailContacto.Text,
            //    telefono = txtTelefonoContacto.Text,
            //    fax = txtFaxContacto.Text,
            //    celular = txtCelularContacto.Text,
            //    nextel = txtNextelContacto.Text,
            //    rpc = txtRPCContacto.Text,
            //    rpm = txtRpmContacto.Text,
            //    statusflag = "I"
            //};

            //if (!string.IsNullOrWhiteSpace(c.nombre) &&
            //    !string.IsNullOrWhiteSpace(c.email) &&
            //    !string.IsNullOrWhiteSpace(c.cargo))
            //{
            //    contactos.Add(c);
            //    loadgridContactos();
            //}

            CONTACTO contacto = contactos.AddNew();
            

            if (string.IsNullOrWhiteSpace(txtNombreContacto.Text) ||
                string.IsNullOrWhiteSpace(txtTelefonoContacto.Text))
            {
                MessageBox.Show("El nombre o teléfono del contacto se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                contactos.CancelNew(contactos.IndexOf(contacto));
            }
            else
            {
                contactos.EndNew(contactos.IndexOf(contacto));
            }

            reloadgridContactos();
            clearPanelContactos();
            
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                //procede a modificar
                int index = gridContactos.SelectedRows[0].Index;

                //CONEXION.CONTACTO cto = gridContactos.SelectedRows[0].DataBoundItem as CONTACTO;

                //cto.idContacto = gridContactos.SelectedRows[0].Cells[0].Value.ToString() ?? string.Empty;
                //cto.nombre = gridContactos.SelectedRows[0].Cells[1].Value.ToString();
                //cto.cargo = gridContactos.SelectedRows[0].Cells[2].Value.ToString();
                //cto.email = gridContactos.SelectedRows[0].Cells[3].Value.ToString();
                //cto.telefono = gridContactos.SelectedRows[0].Cells[4].Value.ToString() ?? string.Empty;
                //cto.fax = gridContactos.SelectedRows[0].Cells[5].Value.ToString() ?? string.Empty;
                //cto.celular = gridContactos.SelectedRows[0].Cells[6].Value.ToString() ?? string.Empty;
                //cto.nextel = gridContactos.SelectedRows[0].Cells[7].Value.ToString() ?? string.Empty;
                //cto.rpc = gridContactos.SelectedRows[0].Cells[8].Value.ToString() ?? string.Empty;
                //cto.rpm = gridContactos.SelectedRows[0].Cells[9].Value.ToString() ?? string.Empty;
                //cto.idcliente = gridContactos.SelectedRows[0].Cells[10].Value.ToString() ?? string.Empty;


                CONTACTO c = contactos[index];

                c.nombre = txtNombreContacto.Text;
                c.telefono = txtTelefonoContacto.Text;
                c.cargo = txtCargoContacto.Text;
                c.email = txtEmailContacto.Text;
                c.celular = txtCelularContacto.Text;
                c.rpm = txtRpmContacto.Text;
                c.rpc = txtRPCContacto.Text;
                c.nextel = txtNextelContacto.Text;
                c.fax = txtFaxContacto.Text;
                c.statusflag = "U";

                reloadgridContactos();
                clearPanelContactos();

                //PRESENTACION.Personas.Vendedor.Contacto contact = new Vendedor.Contacto(cto);

                //if (contact.ShowDialog() == DialogResult.OK)
                //{
                //    //se actualiza el grid
                //    CONEXION.CONTACTO c = contact.Contact;
                //    c.statusflag = "U";  //'update'

                //    if (!string.IsNullOrWhiteSpace(c.nombre) &&
                //        !string.IsNullOrWhiteSpace(c.email) &&
                //        !string.IsNullOrWhiteSpace(c.cargo))
                //    {
                //        //quitamos la fila a modificar
                //        contactos.RemoveAt(index);
                //        //insertamos la nueva fila
                //        contactos.Insert(index, c);

                //        loadgridContactos();
                //    }
                //}
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                ////procede a eliminar (ocultar)
                //int index = gridContactos.SelectedRows[0].Index;
                ////contactos.RemoveAt(index);
                //contactos[index].statusflag = "D"; //delete

                //loadgridContactos();

                int index = gridContactos.SelectedRows[0].Index;

                CONTACTO c = gridContactos.SelectedRows[0].DataBoundItem as CONTACTO;

                if (c.statusflag == "I")
                {
                    contactos.RemoveAt(index);
                }
                else
                {
                    CONTACTO contactoEliminar = contactos[index];                    
                    contactoEliminar.statusflag = "D";                    
                }
                
                reloadgridContactos();
                clearPanelContactos();
            }
        }

        internal void reloadgridContactos()
        {
            //if (contactos.Count > 0)
            //{                
            //    gridContactos.DataSource = null;
            //    gridContactos.DataSource = contactos;
            //    setRowsReadOnly();

            //    if (gridContactos.Rows.Count > 0)
            //    {
            //        foreach (DataGridViewRow dr in gridContactos.Rows)
            //        {
            //            if (dr.Cells["statusflag"].Value != null)
            //            {
            //                if (dr.Cells["statusflag"].Value.ToString() == "D")
            //                {
            //                    dr.Visible = false;
            //                }
            //            }
            //        } 
            //    }
            //} 

            if (contactos.Count > 0)
            {
                if (gridContactos.Rows.Count > 0)
                {                 
                    foreach (DataGridViewRow dr in gridContactos.Rows)
                    {
                        if (dr.Cells["statusflag"].Value != null)
                        {
                            if (dr.Cells["statusflag"].Value.ToString() == "D")
                            {
                                gridContactos.CurrentCell = null;
                                dr.Visible = false;
                            }
                        }
                    }
                }
            }
        }

        internal void clearPanelContactos()
        {
            txtNombreContacto.ResetText();
            txtTelefonoContacto.ResetText();
            txtCargoContacto.ResetText();
            txtEmailContacto.ResetText();
            txtCelularContacto.ResetText();
            txtRpmContacto.ResetText();
            txtRPCContacto.ResetText();
            txtNextelContacto.ResetText();
            txtFaxContacto.ResetText();
        }

        #endregion

        private void cmbProvincia_DropDown(object sender, EventArgs e)
        {
            //limpiamos el combobox de Distrito
            cmbDistrito.DataSource = null;
        }

        private void cmbProvincia_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cmbProvincia.SelectedIndex >= 0)
            {
                string idProvincia = cmbProvincia.SelectedValue.ToString();      
                
                cmbDistrito.DataSource = ctDistrito.getListDistrito(idProvincia);
                cmbDistrito.DisplayMember = "nombreDistrito";
                cmbDistrito.ValueMember = "idDistrito";                                
            }                
        }

        internal void registrarCliente()
        {                       
            //verificamos que la información básica este ingresada
            if (!string.IsNullOrWhiteSpace(txtRazonSocial.Text))
            {
                if (!string.IsNullOrWhiteSpace(txtDireccion.Text))
                {
                    if (!string.IsNullOrWhiteSpace(txtRuc.Text))
                    {
                        if (cmbSector.SelectedIndex >= 0)
                        {
                            if (cmbVendedor.SelectedIndex >= 0)
                            {
                                if (cmbProvincia.SelectedIndex >= 0)
                                {
                                    if (cmbDistrito.SelectedIndex >= 0)
                                    {
                                        if (cmbCategoria.SelectedIndex >= 0)
                                        {
                                            if (cmbSucursal.SelectedIndex >= 0)
                                            {
                                                if (!string.IsNullOrWhiteSpace(txtRegistradoPor.Text))
                                                {
                                                    if (contactos.Count > 0)
                                                    {
                                                        //verificamos que no se encuentre registrado

                                                        List<CLIENTE> busquedaRazonSocial = ctClientes.buscarClienteExacto("razonSocial", (txtRazonSocial.Text).Trim());
                                                        List<CLIENTE> busquedaRuc = ctClientes.buscarClienteExacto("clienteruc", (txtRuc.Text).Trim());

                                                        if (busquedaRazonSocial.Count == 0)
                                                        {
                                                            if (busquedaRuc.Count == 0)
                                                            {
                                                                //procede con registrar la información del cliente
                                                                CLIENTE client = new CLIENTE()
                                                                {
                                                                    razonSocial = txtRazonSocial.Text,
                                                                    direccion = txtDireccion.Text,
                                                                    clienteruc = txtRuc.Text,
                                                                    provincia = cmbProvincia.SelectedValue.ToString(),
                                                                    idDistrito = cmbDistrito.SelectedValue.ToString(),
                                                                    idsector = cmbSector.SelectedValue.ToString(),
                                                                    idVendedor = cmbVendedor.SelectedValue.ToString(),
                                                                    idcategoria = cmbCategoria.SelectedValue.ToString(),
                                                                    idSucursal = cmbSucursal.SelectedValue.ToString(),
                                                                    telefono = txtTelefono.Text,
                                                                    email = txtEmail.Text,
                                                                    eliminado = 0,
                                                                    fechaRegistro = Convert.ToDateTime(txtFechaRegistro.Text),
                                                                    registradoPor = txtRegistradoPor.Text
                                                                };

                                                                //pasamos BindingList a List
                                                                List<CONTACTO> lista = contactos.ToList<CONTACTO>();

                                                                DialogResult result = ctClientes.registrarCliente(client, lista);

                                                                if (result == DialogResult.OK)
                                                                {
                                                                    MessageBox.Show("Cliente registrado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                                                                    //procede con la actualizacion y limpieza de controles
                                                                    setReadOnlyPanel();
                                                                }
                                                            }
                                                            else
                                                            {
                                                                //Informar que ya se encuentra registrado
                                                                DialogMessageBoxList dialogBox = new DialogMessageBoxList("Cotizav", "El cliente ya se encuentra registrado en el sistema", busquedaRuc, "Cliente");
                                                                dialogBox.ShowDialog(this);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            DialogMessageBoxList dialogBox = new DialogMessageBoxList("Cotizav", "El cliente ya se encuentra registrado en el sistema", busquedaRazonSocial, "Cliente");
                                                            dialogBox.ShowDialog(this);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show("Para registrar un cliente, como mínimo debe registrarse un contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                                    }
                                                }
                                                else
                                                {
                                                    MessageBox.Show("El campo 'Registrado por' se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                                }
                                            }
                                            else
                                            {
                                                MessageBox.Show("Seleccione sucursal", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                            }
                                        }
                                        else
                                        {
                                            MessageBox.Show("Seleccione categoria", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Seleccione distrito", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Seleccione provincia", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Seleccione vendedor", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Seleccione sector", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese número de R.U.C.", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese dirección", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese razón social", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        internal void modificarCliente()
        {
            //verificamos que la información básica este ingresada           
            if (MessageBox.Show(this.ParentForm,"¿Confirma actualizar la información del Cliente?","Cotizav",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                if (!string.IsNullOrWhiteSpace(txtRazonSocial.Text))
                {
                    if (!string.IsNullOrWhiteSpace(txtDireccion.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtRuc.Text))
                        {
                            if (cmbSector.SelectedIndex >= 0)
                            {
                                if (cmbVendedor.SelectedIndex >= 0)
                                {
                                    if (cmbProvincia.SelectedIndex >= 0)
                                    {
                                        if (cmbDistrito.SelectedIndex >= 0)
                                        {
                                            if (cmbCategoria.SelectedIndex >= 0)
                                            {
                                                if (cmbSucursal.SelectedIndex >= 0)
                                                {
                                                    if (contactos.Count > 0)
                                                    {
                                                        //procede con actualizar la información del cliente
                                                        CLIENTE client = new CLIENTE()
                                                        {
                                                            idCliente = groupInfoBasica.Tag.ToString(),
                                                            razonSocial = txtRazonSocial.Text,
                                                            direccion = txtDireccion.Text,
                                                            clienteruc = txtRuc.Text,
                                                            provincia = cmbProvincia.SelectedValue.ToString(),
                                                            idDistrito = cmbDistrito.SelectedValue.ToString(),
                                                            idsector = cmbSector.SelectedValue.ToString(),
                                                            idVendedor = cmbVendedor.SelectedValue.ToString(),
                                                            idcategoria = cmbCategoria.SelectedValue.ToString(),
                                                            idSucursal = cmbSucursal.SelectedValue.ToString(),
                                                            email = txtEmail.Text,
                                                            telefono = txtTelefono.Text,
                                                            eliminado = 0,
                                                            fechaModificacion = System.DateTime.Now
                                                        };

                                                        //pasamos bindinglist a list
                                                        List<CONTACTO> lista = contactos.ToList<CONTACTO>();

                                                        DialogResult result = ctClientes.modificarCliente(client, lista);

                                                        if (result == DialogResult.OK)
                                                        {
                                                            MessageBox.Show("Cliente modificado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                                                            //procede con la actualizacion y limpieza de controles
                                                            setReadOnlyPanel();
                                                        }
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show("Para registrar un cliente, como mínimo debe estar registrado un contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                                    }
                                                }
                                                else
                                                {
                                                    MessageBox.Show("Seleccione sucursal", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                                }
                                            }
                                            else
                                            {
                                                MessageBox.Show("Seleccione categoria", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                            }
                                        }
                                        else
                                        {
                                            MessageBox.Show("Seleccione distrito", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Seleccione provincia", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Seleccione sector", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Seleccione vendedor", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Ingrese número de R.U.C.", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese dirección", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese razón social", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                } 
            }
        }

        internal void eliminarCliente()
        {
            if(MessageBox.Show(this.ParentForm,"¿Confirma eliminar el Cliente y todo su contenido?","Cotizav",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                string idCliente = groupInfoBasica.Tag.ToString();

                if (idCliente != null)
                {
                    CLIENTE cli = new CLIENTE() { idCliente = idCliente };
                    //procedo a elimnar el cliente
                    DialogResult result = ctClientes.eliminarCliente(cli);

                    if (result == DialogResult.OK)
                    {
                        MessageBox.Show("Cliente eliminado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }
            }
        }

        internal void setReadOnlyPanel()
        {
            txtRazonSocial.ResetText(); txtRazonSocial.ReadOnly = true;
            txtDireccion.ResetText(); txtDireccion.ReadOnly = true;
            txtRuc.ResetText(); txtRuc.ReadOnly = true;
            cmbSector.DropDownStyle = ComboBoxStyle.Simple;     cmbSector.Enabled = false;      cmbSector.SelectedIndex = -1;
            cmbVendedor.DropDownStyle = ComboBoxStyle.Simple; cmbVendedor.Enabled = false;      cmbVendedor.SelectedIndex = -1;
            cmbProvincia.DropDownStyle = ComboBoxStyle.Simple;  cmbProvincia.Enabled = false;   cmbProvincia.SelectedIndex = -1;
            cmbDistrito.DropDownStyle = ComboBoxStyle.Simple;   cmbDistrito.Enabled = false;    cmbDistrito.SelectedIndex = -1;
            cmbCategoria.DropDownStyle = ComboBoxStyle.Simple;  cmbCategoria.Enabled = false;   cmbCategoria.SelectedIndex = -1;
            cmbSucursal.DropDownStyle = ComboBoxStyle.Simple;   cmbSucursal.Enabled = false;    cmbSucursal.SelectedIndex = -1;
            txtEmail.ResetText();   txtEmail.ReadOnly = true;
            txtTelefono.ResetText(); txtTelefono.ReadOnly = true;
            txtFechaRegistro.ResetText(); txtFechaRegistro.ReadOnly = true;
            txtRegistradoPor.ResetText(); txtRegistradoPor.ReadOnly = true;

            txtNombreContacto.ResetText(); txtNombreContacto.ReadOnly = true;
            txtTelefonoContacto.ResetText(); txtTelefonoContacto.ReadOnly = true;
            txtCargoContacto.ResetText(); txtCargoContacto.ReadOnly = true;
            txtEmailContacto.ResetText(); txtEmailContacto.ReadOnly = true;
            txtCelularContacto.ResetText(); txtCelularContacto.ReadOnly = true;
            txtRpmContacto.ResetText(); txtRpmContacto.ReadOnly = true;
            txtRPCContacto.ResetText(); txtRPCContacto.ReadOnly = true;
            txtNextelContacto.ResetText(); txtNextelContacto.ReadOnly = true;
            txtFaxContacto.ResetText(); txtFaxContacto.ReadOnly = true;
            btnLimpiar.Enabled = false;
            
            gridContactos.DataSource = null;
            btnNuevo.Enabled = false;
            btnModificar.Enabled = false;
            btnEliminar.Enabled = false;
        }

        internal void setEditablePanel()
        {
            txtRazonSocial.ReadOnly = false;
            txtDireccion.ReadOnly = false;
            txtRuc.ReadOnly = false;

            cmbSector.DropDownStyle = ComboBoxStyle.DropDownList; cmbSector.Enabled = true;
            cmbVendedor.DropDownStyle = ComboBoxStyle.DropDownList; cmbVendedor.Enabled = true; 
            cmbProvincia.DropDownStyle = ComboBoxStyle.DropDownList; cmbProvincia.Enabled = true; 
            cmbDistrito.DropDownStyle = ComboBoxStyle.DropDownList; cmbDistrito.Enabled = true; 
            cmbCategoria.DropDownStyle = ComboBoxStyle.DropDownList; cmbCategoria.Enabled = true;
            cmbSucursal.DropDownStyle = ComboBoxStyle.DropDownList; cmbSucursal.Enabled = true;
            txtEmail.ReadOnly = false;
            txtTelefono.ReadOnly = false;
            txtRegistradoPor.ReadOnly = false;
            txtFechaRegistro.Text = DateTime.Now.ToShortDateString();

            txtNombreContacto.ReadOnly = false;
            txtTelefonoContacto.ReadOnly = false;
            txtCargoContacto.ReadOnly = false;
            txtEmailContacto.ReadOnly = false;
            txtCelularContacto.ReadOnly = false;
            txtRpmContacto.ReadOnly = false;
            txtRPCContacto.ReadOnly = false;
            txtNextelContacto.ReadOnly = false;
            txtFaxContacto.ReadOnly = false;
            btnLimpiar.Enabled = true;

            btnNuevo.Enabled = true;
            btnModificar.Enabled = true;
            btnEliminar.Enabled = true;
        }

        internal void clearPanel()
        {
            txtRazonSocial.ResetText(); 
            txtDireccion.ResetText(); 
            txtRuc.ResetText();
            txtRegistradoPor.ResetText();
            cmbSector.SelectedIndex = -1;
            cmbVendedor.SelectedIndex = -1;
            cmbProvincia.SelectedIndex = -1;
            cmbDistrito.SelectedIndex = -1;
            cmbCategoria.SelectedIndex = -1;
            cmbSucursal.SelectedIndex = -1;
            txtEmail.ResetText();
            txtTelefono.ResetText();

            txtNombreContacto.ResetText(); 
            txtTelefonoContacto.ResetText(); 
            txtCargoContacto.ResetText(); 
            txtEmailContacto.ResetText();
            txtCelularContacto.ResetText(); 
            txtRpmContacto.ResetText(); 
            txtRPCContacto.ResetText(); 
            txtNextelContacto.ResetText(); 
            txtFaxContacto.ResetText();

            contactos.Clear();
            gridContactos.DataSource = contactos;
        }

        internal void mostrarCliente(string idCliente)
        {
            //obtengo el cliente
            CLIENTE clte = ctClientes.getCliente(idCliente);

            //coloco la informacion en el panel
            //coloco el id en el panel
            groupInfoBasica.Tag = clte.idCliente; 
            txtRazonSocial.Text = clte.razonSocial;
            txtFechaRegistro.Text = clte.fechaRegistro != null ? clte.fechaRegistro.GetValueOrDefault().ToShortDateString() : string.Empty;
            txtDireccion.Text = clte.direccion;
            txtRuc.Text = clte.clienteruc;
            
            cmbProvincia.SelectedIndex = cmbProvincia.Items.Cast<PROVINCIA>().SingleOrDefault(x => x.idProvincia == clte.provincia) != null ? cmbProvincia.Items.IndexOf(cmbProvincia.Items.Cast<PROVINCIA>().SingleOrDefault(x => x.idProvincia == clte.provincia)): -1;

            if (cmbProvincia.SelectedIndex >= 0)
            {            
                this.cmbProvincia_SelectionChangeCommitted(cmbProvincia, EventArgs.Empty);
            }

            cmbDistrito.SelectedIndex = cmbDistrito.Items.Cast<DISTRITO>().SingleOrDefault(x => x.idDistrito == clte.idDistrito) != null ? cmbDistrito.Items.IndexOf(cmbDistrito.Items.Cast<DISTRITO>().SingleOrDefault(x => x.idDistrito == clte.idDistrito)) : -1;
            cmbSector.SelectedIndex = cmbSector.Items.Cast<SECTOR>().SingleOrDefault(x => x.idSector == clte.idsector) != null ? cmbSector.Items.IndexOf(cmbSector.Items.Cast<SECTOR>().SingleOrDefault(x => x.idSector == clte.idsector)) : -1;
            cmbVendedor.SelectedIndex = cmbVendedor.Items.Cast<VENDEDOR>().SingleOrDefault(x => x.idVendedor == clte.idVendedor) != null ? cmbVendedor.Items.IndexOf(cmbVendedor.Items.Cast<VENDEDOR>().SingleOrDefault(x => x.idVendedor == clte.idVendedor)) : -1;
            cmbCategoria.SelectedIndex = cmbCategoria.Items.Cast<CATEGORIA>().SingleOrDefault(x => x.idCategoria == clte.idcategoria) != null ? cmbCategoria.Items.IndexOf(cmbCategoria.Items.Cast<CATEGORIA>().SingleOrDefault(x => x.idCategoria == clte.idcategoria)) : -1;
            cmbSucursal.SelectedIndex = cmbSucursal.Items.Cast<SUCURSAL>().SingleOrDefault(x => x.idSucursal == clte.idSucursal) != null ? cmbSucursal.Items.IndexOf(cmbSucursal.Items.Cast<SUCURSAL>().SingleOrDefault(x => x.idSucursal == clte.idSucursal)) : -1;

            txtEmail.Text = clte.email;
            txtTelefono.Text = clte.telefono;
            txtRegistradoPor.Text = clte.registradoPor;

            List<CONTACTO> tmpContacto = ctcontactos.getListContacto(clte.idCliente);
            contactos.Clear();
            
            foreach (CONTACTO c in tmpContacto)
            {
                contactos.Add(c);
            }

            gridContactos.DataSource = contactos;
            gridContactos.ClearSelection();
            setRowsReadOnly();
        }

        internal void enableModifyPanel()
        {
            //verificamos si ha seleccionado un cliente            
            RegistroCliente regCliente = this.ParentForm as RegistroCliente;
            IURegistro iureg = regCliente.Controls["panelRegistro"] as IURegistro;

            bool objectSelected = iureg.isObjectSelectedinGrid();

            if (objectSelected)
            {
                setEditablePanel();
            }
        }

        internal bool cancelarRegistro()
        {
            bool result = false;

            if (MessageBox.Show(this.ParentForm, "¿Desea cancelar el registro del cliente?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                this.clearPanel();
                this.setReadOnlyPanel();

                result = true;
            }
            else
            {
                result = false;
            }

            return result;
        }

        internal bool cancelarActualizacion()
        {
            bool result = false;

            if (MessageBox.Show(this.ParentForm, "¿Desea cancelar la actualización del cliente?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                this.clearPanel();
                this.setReadOnlyPanel();

                result = true;
            }
            else
            {
                result = false;
            }

            return result;
        }

        private void gridContactos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridContactos.DataSource != null)
            {
                if (gridContactos.Rows.Count > 0)
                {
                    gridContactos.Columns["idContacto"].Visible = false;
                    gridContactos.Columns["nombre"].HeaderText = "Nombre";
                    gridContactos.Columns["cargo"].HeaderText = "Cargo";
                    gridContactos.Columns["email"].HeaderText = "E-mail";
                    gridContactos.Columns["telefono"].HeaderText = "Teléfono";
                    gridContactos.Columns["fax"].HeaderText = "Fax";
                    gridContactos.Columns["celular"].HeaderText = "Celular";
                    gridContactos.Columns["nextel"].HeaderText = "Nextel";
                    gridContactos.Columns["rpc"].HeaderText = "RPC";
                    gridContactos.Columns["rpm"].HeaderText = "RPM";
                    gridContactos.Columns["idCliente"].Visible = false;
                    gridContactos.Columns["eliminado"].Visible = false;
                    gridContactos.Columns["statusflag"].Visible = false;
                    gridContactos.Columns["CLIENTE"].Visible = false;
                }
            }
        }

        internal void setRegistradoPorReadOnly()
        {
            txtRegistradoPor.ReadOnly = true;
        }

        internal void setRegistradoPorEditable()
        {
            txtRegistradoPor.ReadOnly = false;
        }

        private void gridContactos_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                CONTACTO c = gridContactos.SelectedRows[0].DataBoundItem as CONTACTO;

                txtNombreContacto.Text = c.nombre;
                txtTelefonoContacto.Text = c.telefono;
                txtCargoContacto.Text = c.cargo;
                txtEmailContacto.Text = c.email;
                txtCelularContacto.Text = c.celular;
                txtRpmContacto.Text = c.rpm;
                txtRPCContacto.Text = c.rpc;
                txtNextelContacto.Text = c.nextel;
                txtFaxContacto.Text = c.fax;
            }
        }

        #region Formato Cliente TextBox
        private void txtRuc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '(')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == ')')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '-')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
        #endregion

        #region Formato Contacto TextBox
        private void txtTelefonoContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '(')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == ')')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '-')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtAnexoContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtFaxContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '-')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '(')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == ')')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtNextelContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '*')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtRpmContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '#')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtRpcContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '(')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == ')')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '-')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtCelularContacto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '-')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == '(')
            {
                e.Handled = false;
            }
            else if (e.KeyChar == ')')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
        #endregion

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            clearPanelContactos();
        }
    }
}
